﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using vudu.Logica.Clases;

namespace vudu.EnlaceDatos.SqlServer
{
    /// <summary>
    /// Clase que contiene los metodos basicos para el caso de uso de gestionar evaluacion
    /// (Agregar,Modificar,Eliminar,Consultar)
    /// </summary>
    public class SqlServerHorarioProfesor
    {

        public List<SeccionMateria> ConsultarSeccionesProfesor(Profesor profesor)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarNombreMateriasProfesor]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<SeccionMateria> materiasProfesor = new List<SeccionMateria>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    SeccionMateria seccionMateria = new SeccionMateria();
                    seccionMateria.Materia.Nombre = reader.GetString(0);
                    
                    materiasProfesor.Add(seccionMateria);

                }
                return materiasProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<Practica> ConsultarSeccionesPracticaProfesor(Profesor profesor)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarNombrePracticasProfesor]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<Practica> materiasProfesor = new List<Practica>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Practica seccionPractica = new Practica();
                    seccionPractica.NombrePractica = reader.GetString(0);

                    materiasProfesor.Add(seccionPractica);

                }
                return materiasProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<SeccionMateria> ConsultarDatosSeccionProfesor(Profesor profesor, SeccionMateria seccion)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarDatosMateriasProfesor]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                command.Parameters.AddWithValue("@nombreMateria", seccion.Materia.Nombre); 
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@nombreMateria"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<SeccionMateria> materiasProfesor = new List<SeccionMateria>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    SeccionMateria seccionMateria = new SeccionMateria();
                    seccionMateria.Codigo = reader.GetInt32(0);
                    seccionMateria.IdSeccionMateria = reader.GetInt32(1);

                    materiasProfesor.Add(seccionMateria);

                }
                return materiasProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<Practica> ConsultarDatosPracticaProfesor(Profesor profesor, Practica practica)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarDatosPracticaProfesor]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                command.Parameters.AddWithValue("@nombrePractica", practica.NombrePractica);
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@nombrePractica"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<Practica> materiasProfesor = new List<Practica>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Practica seccionMateria = new Practica();
                    seccionMateria.IdPractica = reader.GetInt32(0);
                    seccionMateria.NumeroSeccion = reader.GetInt32(1);

                    materiasProfesor.Add(seccionMateria);

                }
                return materiasProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<HorarioDeClase> ConsultarHorarioSeccionProfesor(Profesor profesor, SeccionMateria seccion)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarHorarioMateriasProfesor]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                
                command.Parameters.AddWithValue("@idSeccion", seccion.IdSeccionMateria);
                command.Parameters.AddWithValue("@Nombre", seccion.Materia.Nombre);
                command.Parameters["@idSeccion"].Direction = ParameterDirection.Input;
                command.Parameters["@Nombre"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<HorarioDeClase> horariosProfesor = new List<HorarioDeClase>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    HorarioDeClase horarioDeClase = new HorarioDeClase();
                    horarioDeClase.SalonDeClase = new Salon();
                    horarioDeClase.Dia = reader.GetString(0);
                    horarioDeClase.HoraInicio = reader.GetDateTime(1);
                    horarioDeClase.HoraFin = reader.GetDateTime(2);
                    horarioDeClase.SalonDeClase.Nombre = reader.GetString(3);

                    horariosProfesor.Add(horarioDeClase);

                }
                return horariosProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<HorarioDeClase> ConsultarHorarioPracticaProfesor(Profesor profesor, Practica practica)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarHorarioPracticaProfesor]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                
                command.Parameters.AddWithValue("@idPractica", practica.IdPractica);
                command.Parameters.AddWithValue("@Nombre", practica.NombrePractica);
                command.Parameters["@idPractica"].Direction = ParameterDirection.Input;
                command.Parameters["@Nombre"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<HorarioDeClase> horariosProfesor = new List<HorarioDeClase>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    HorarioDeClase horarioDeClase = new HorarioDeClase();
                    horarioDeClase.SalonDeClase = new Salon();
                    horarioDeClase.Dia = reader.GetString(0);
                    horarioDeClase.HoraInicio = reader.GetDateTime(1);
                    horarioDeClase.HoraFin = reader.GetDateTime(2);
                    horarioDeClase.SalonDeClase.Nombre = reader.GetString(3);

                    horariosProfesor.Add(horarioDeClase);

                }
                return horariosProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<Profesor> ConsultarNombreProfesor (Profesor profesor)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarDatosProfesor]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.

                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<Profesor> datos = new List<Profesor>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Profesor dato = new Profesor();
                    dato.Nombre = reader.GetString(0);
                    dato.Apellido = reader.GetString(1);
                    
                    datos.Add(dato);

                }
                return datos;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
      
        }

        public  String ConsultarNombreUniversidadMateria(int id)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarUniversidadMateria]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.

                command.Parameters.AddWithValue("@idMateria", id);

                command.Parameters["@idMateria"].Direction = ParameterDirection.Input;


                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                String Universidad = "";


                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Universidad = reader.GetString(0);

                }


                return Universidad;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

        }

        public String ConsultarNombreUniversidadPractica(int id)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarUniversidadPractica]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.

                command.Parameters.AddWithValue("@idPractica", id);

                command.Parameters["@idPractica"].Direction = ParameterDirection.Input;


                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                String Universidad = "";


                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Universidad = reader.GetString(0);

                }


                return Universidad;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

        }

        public String ConsultarNombreEscuelaMateria(int id)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarDatosEscuelaMateria]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.

                command.Parameters.AddWithValue("@idMateria", id);

                command.Parameters["@idMateria"].Direction = ParameterDirection.Input;


                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                String Universidad = "";


                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Universidad = reader.GetString(0);

                }


                return Universidad;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

        }

        public String ConsultarNombreEscuelaPractica(int id)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarDatosEscuelaPractica]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.

                command.Parameters.AddWithValue("@idPractica", id);

                command.Parameters["@idPractica"].Direction = ParameterDirection.Input;


                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                String Universidad = "";


                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Universidad = reader.GetString(0);

                }


                return Universidad;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

        }




    }
}